package code.whmmm.util.spring.quartz.task;

import code.whmmm.util.spring.quartz.util.QuartzUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import code.whmmm.util.simple.TimeUtil;

/**
 * <p><b>
 *
 * </b></p>
 * <br/>
 * 创建时间: 2019/11/18 17:18
 *
 * @author Zero
 */
public abstract class LogWrapRunnable implements Runnable {

    protected Logger log = LoggerFactory.getLogger(this.getClass());


    /**
     * <b>doTask 的包装方法，不能重写此方法 !! </b>
     */
    public final void run() {
        String taskName = getTaskName();
        if (taskName == null) {
            taskName = " 未命名线程 ";
        }
        long l = TimeUtil.getTimestamp();
        log.info(taskName + QuartzUtil.getStartLog());

        try {
            doTask();
            log.info(taskName + QuartzUtil.getEndLog(l));
        } catch (Exception e) {
            log.error(taskName + " 执行异常");
            log.error(taskName, e);
        }
    }

    /**
     * 执行逻辑，无默认事务配置，如果需要，需要自己配置。
     */
    protected abstract void doTask();


    /**
     * 获取 记录日志任务名称(thread 线程 )
     *
     * @return String
     */
    public abstract String getTaskName();

    /**
     * true 可用，false 禁用
     *
     * @return true 可用，  false 禁用
     */
    public abstract boolean isEnable();
}
